/**
 * 请勿将俱乐部专享资源复制给其他人，保护知识产权即是保护我们所在的行业，进而保护我们自己的利益
 * 即便是公司的同事，也请尊重 JFinal 作者的努力与付出，不要复制给同事
 * 
 * 如果你尚未加入俱乐部，请立即删除该项目，或者现在加入俱乐部：http://jfinal.com/club
 * 
 * 俱乐部将提供 jfinal-club 项目文档与设计资源、专用 QQ 群，以及作者在俱乐部定期的分享与答疑，
 * 价值远比仅仅拥有 jfinal club 项目源代码要大得多
 * 
 * JFinal 俱乐部是五年以来首次寻求外部资源的尝试，以便于有资源创建更加
 * 高品质的产品与服务，为大家带来更大的价值，所以请大家多多支持，不要将
 * 首次的尝试扼杀在了摇篮之中
 */

package com.tianpengtech.front.web.passport;

import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;
import com.tianpengtech.common.model.user.User;
import com.tianpengtech.common.util.IpKit;
import com.tianpengtech.front.mobile.common.constant.Constant;
import com.tianpengtech.front.web.passport.PassportService;

/**
 * RegValidator 验证注册表单，并且判断邮箱、昵称是否已被注册
 */
public class PassportValidator extends Validator {
	private static final PassportService srv = PassportService.me;


	protected void validate(Controller c) {
		String actionKey = getActionKey();
		validateRequired("mobile", "msg", "手机号码不能为空");
		String mobile = c.getPara("mobile").trim();
		if (mobile.contains(" ") || mobile.contains("　")) {
			addError("msg", "手机号码不能包含空格");
		}
		validateRegex("mobile", Constant.REGEX_MOBILE,"msg","手机号码格式不正确");
		
		if (actionKey.equals("/passport/save")){
			if (PassportService.me.isMobileExists(c.getPara("mobile"), User.USER_TYPE_PROV)) {
				addError("msg", "手机号码已被注册");
			}
		}

		if (actionKey.equals("/passport/save") || actionKey.equals("/passport/passwordBack")){
			validateAuthCode(c,true);
			validateRequired("password", "msg", "密码不能为空");
		}else if(actionKey.equals("/passport/authCode")){
			validateAuthCode(c,false);
		}
	}

	protected void handleError(Controller c) {
		c.renderJson();
	}

	/**
	 * 验证 验证码是否正确
	 * @param flag 验证后是否删除验证码
	 */
	private void validateAuthCode(Controller c,boolean flag){
		String authCode=c.getPara("authCode");
		if (null == authCode){
			this.addError("msg","验证码为空");
			return;
		}
		int code = 0;
		try {
			code = Integer.parseInt(authCode);
		}catch (NumberFormatException e){
			this.addError("msg","验证码格式不正确");
			return;
		}
		String ip = IpKit.getRealIp(c.getRequest());
		String mobile=c.getPara("mobile");
		boolean f=srv.authCode(mobile,ip,code,flag);
		if (!f){
			this.addError("msg","验证码错误,请重新获取后再试");
			return;
		}
	}

}

